#include <stdio.h>
#include <stdlib.h>
#include "palindromo.h"


pflag_t vprimos[MAIOR_PRIMO];


/* Verifica se a palavra e palindromo 
	return 1 caso for*/

int check_palavra(char * str, int len){
	int it = 0;
	
	len--;

	if(len == it) return 0; //Não considera uma unica letra

	//Compara as letras da extremidade para o centro
	while(len > it){
		if(UCASE(str[it]) != UCASE(str[len])) return 0;
		it++;
		len--;
	}

	return 1;
}

/* Verifica se a frase e palindromo 
	return 1 caso sim*/

int check_frase(char * str, int len){
	int max, it = 0;

	max = len - 1;

	if(max == 0) return 0;

	while(len > it){
		it++;
		while(it < max && (UCASE(str[it]) < 'A' || UCASE(str[it]) > 'Z')) it++; //ignora o que não for letra
		len--;
		while(len > 0 && (UCASE(str[len]) < 'A' || UCASE(str[len]) > 'Z')) len--; //ignora o que não for letra
		if(it > len || UCASE(str[it]) != UCASE(str[len])) return 0;
	}

	return 1;
}


int teste_primo(char * str, int len){
	int it, sum;
	int primo, multiplo;

	//utiliza só a metade do palindromo
	if(len & 1){
		len /= 2;
		sum = (int) str[len];
	} else {
		len /= 2;
		sum = 0;
	}

	//calcula o numero
	for(it = 0; it < len; it++)
		sum += 2*((int) str[it]);

	if(sum >= MAIOR_PRIMO){
		printf("Erro soma do palidromo - %d\n", sum);
		return 0;
		}
	else {
		//zera o vetor que marca quais são primos
		for(it = 0; it <= sum; it++) vprimos[it] = 0;

		primo = 2;

		while( (primo*primo) < sum ){
			multiplo = 2*primo; //primeiro multiplo 

			while(multiplo < sum){ //percorre o vetor marcando os multiplos
				vprimos[multiplo] = 1;
				multiplo += primo;
			}

			if(multiplo == sum) return 0; //encontrou um divisor

			while(vprimos[++primo]); //encontra o proximo primo
		}

		return 1;
	}
}
